using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._AviationTools._Charting._Cartography
{
    /// <summary>
    /// <para>Rotate Aviation Features</para>
    /// <para>Aligns features to a grid or to the page.</para>
    /// <para>将要素与网格或页面对齐。</para>
    /// </summary>    
    [DisplayName("Rotate Aviation Features")]
    public class RotateAviationFeatures : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public RotateAviationFeatures()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_map">
        /// <para>Input Map</para>
        /// <para>The map containing aviation features.</para>
        /// <para>包含航空要素的地图。</para>
        /// </param>
        /// <param name="_target_layers">
        /// <para>Target Point or Annotation Layers</para>
        /// <para>The point or annotation feature layers that will be rotated.</para>
        /// <para>将要旋转的点要素图层或注记要素图层。</para>
        /// </param>
        public RotateAviationFeatures(object _in_map, List<object> _target_layers)
        {
            this._in_map = _in_map;
            this._target_layers = _target_layers;
        }
        public override string ToolboxName => "Aviation Tools";

        public override string ToolName => "Rotate Aviation Features";

        public override string CallName => "aviation.RotateAviationFeatures";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_map, _target_layers, _rotate_option.GetGPValue(), _updated_layers];

        /// <summary>
        /// <para>Input Map</para>
        /// <para>The map containing aviation features.</para>
        /// <para>包含航空要素的地图。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Map")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_map { get; set; }


        /// <summary>
        /// <para>Target Point or Annotation Layers</para>
        /// <para>The point or annotation feature layers that will be rotated.</para>
        /// <para>将要旋转的点要素图层或注记要素图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Point or Annotation Layers")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _target_layers { get; set; }


        /// <summary>
        /// <para>Rotate Option</para>
        /// <para><xdoc>
        ///   <para>Specifies how the features will be rotated.</para>
        ///   <bulletList>
        ///     <bullet_item>Rotate to the map's grid—The features will be rotated to the map's grid. This is the default.</bullet_item><para/>
        ///     <bullet_item>Rotate to the top of the page—The features will be rotated to the top of the page.</bullet_item><para/>
        ///     <bullet_item>Rotate to the left of the page—The features will be rotated to the left side of the page.</bullet_item><para/>
        ///     <bullet_item>Rotate to the bottom of the page—The features will be rotated to the bottom of the page.</bullet_item><para/>
        ///     <bullet_item>Rotate to the right of the page—The features will be rotated to the right side of the page.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定要素的旋转方式。</para>
        ///   <bulletList>
        ///     <bullet_item>旋转至地图的格网—要素将旋转至地图的格网。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>旋转到页面顶部 - 要素将旋转到页面顶部。</bullet_item><para/>
        ///     <bullet_item>旋转到页面左侧 - 要素将旋转到页面左侧。</bullet_item><para/>
        ///     <bullet_item>旋转到页面底部 - 要素将旋转到页面底部。</bullet_item><para/>
        ///     <bullet_item>旋转到页面右侧 - 要素将旋转到页面右侧。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Rotate Option")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _rotate_option_value _rotate_option { get; set; } = _rotate_option_value._ROTATE_TO_GRID;

        public enum _rotate_option_value
        {
            /// <summary>
            /// <para>Rotate to the map's grid</para>
            /// <para>Rotate to the map's grid—The features will be rotated to the map's grid. This is the default.</para>
            /// <para>旋转至地图的格网—要素将旋转至地图的格网。这是默认设置。</para>
            /// </summary>
            [Description("Rotate to the map's grid")]
            [GPEnumValue("ROTATE_TO_GRID")]
            _ROTATE_TO_GRID,

            /// <summary>
            /// <para>Rotate to the top of the page</para>
            /// <para>Rotate to the top of the page—The features will be rotated to the top of the page.</para>
            /// <para>旋转到页面顶部 - 要素将旋转到页面顶部。</para>
            /// </summary>
            [Description("Rotate to the top of the page")]
            [GPEnumValue("ROTATE_TO_PAGE_TOP")]
            _ROTATE_TO_PAGE_TOP,

            /// <summary>
            /// <para>Rotate to the left of the page</para>
            /// <para>Rotate to the left of the page—The features will be rotated to the left side of the page.</para>
            /// <para>旋转到页面左侧 - 要素将旋转到页面左侧。</para>
            /// </summary>
            [Description("Rotate to the left of the page")]
            [GPEnumValue("ROTATE_TO_PAGE_LEFT")]
            _ROTATE_TO_PAGE_LEFT,

            /// <summary>
            /// <para>Rotate to the bottom of the page</para>
            /// <para>Rotate to the bottom of the page—The features will be rotated to the bottom of the page.</para>
            /// <para>旋转到页面底部 - 要素将旋转到页面底部。</para>
            /// </summary>
            [Description("Rotate to the bottom of the page")]
            [GPEnumValue("ROTATE_TO_PAGE_BOTTOM")]
            _ROTATE_TO_PAGE_BOTTOM,

            /// <summary>
            /// <para>Rotate to the right of the page</para>
            /// <para>Rotate to the right of the page—The features will be rotated to the right side of the page.</para>
            /// <para>旋转到页面右侧 - 要素将旋转到页面右侧。</para>
            /// </summary>
            [Description("Rotate to the right of the page")]
            [GPEnumValue("ROTATE_TO_PAGE_RIGHT")]
            _ROTATE_TO_PAGE_RIGHT,

        }

        /// <summary>
        /// <para>Updated Layers</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Layers")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public List<object> _updated_layers { get; set; }


        public RotateAviationFeatures SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}